package cn.zhukelili.multistatus;

/**
 * @Description: 场景类
 * @Auther: hongheshou
 * @Date: 2018/7/23 10:35
 */
public class Client {
    public static void main(String[] args) {
        //定义出发起人
        Originator ori = new Originator();
        //定义出备忘录管理员
        Caretaker caretaker = new Caretaker();
        //初始化
        ori.setState1("中国");
        ori.setState2("强盛");
        ori.setState3("繁荣");
        System.out.println("===初始化状态===\n"+ori);
        //创建一个备忘录
        caretaker.setMemento(ori.createMemento());
        //修改状态值
        ori.setState1("软件");
        ori.setState2("架构");
        ori.setState3("优秀");
        System.out.println("\n===修改后状态===\n"+ori);
        //恢复一个备忘录
        ori.restoreMemento(caretaker.getMemento());
        System.out.println("\n===恢复后状态===\n"+ori);
    }
}

/*
通过这种方式的改造，不管有多少状态都没有问题，直接把原有的对象所有属性都备份
了一遍，想恢复当时的点数据？那太容易了！

**注意**
如果要设计一个在运行期决定备份状态的框架，则建议采用AOP框架来实现，避
免采用动态代理无谓地增加程序逻辑复杂性。
 */
